--- title: "01-项目文档(Project Overview)" created: 2025-11-28 aliases: - 项目文档(Project Overview) tags: - 项目 --- # 项目文档(Project Overview) ## 一、项目简介(What is CanvasChain?) **CanvasChain 是一个面向创作者与收藏者的数字创意交易平台。** 它让任何创意内容(插画 / UI 设计 / 摄影 / 文案 / 代码 / 3D 模型)都可以被发布、拍卖、收藏、交易,并通过虚拟 NFT 的方式进行确权。 你可以把 CanvasChain 理解为: **“创意作品的淘宝 + NFT 确权 + 数字拍卖行 + 盲盒抽卡 + 社区投票中心” 的组合平台。** 它不仅是一个交易网站,而是一整套完整的创意生态系统,提供: - 创意发布 → 搜索 → 排行 - 拍卖 → 实时竞价 → 自动结算 - 钱包 → 扣费 → 收益分成 - 盲盒 → 抽奖 → 开箱动画 - 投票 → 排行榜 → 年度最佳评选 - 后台运营 → 审核 → 报表 → 数据大屏 CanvasChain 的目标是为创作者提供更自由的创作变现渠道,也为收藏者提供内容发现与投资的空间。 --- ## 二、CanvasChain 的核心价值(Why) ### 🎨 对创作者(Creators) - 发布自己的作品(图片、视频、音乐、插画、代码片段等) - 自动生成虚拟 NFT(作品的唯一数字所有权) - 通过拍卖、盲盒、组合售卖方式获得收入 - 钱包实时记录收益与提现 - 参与年度最佳评选,提高曝光度 ### 💎 对收藏者(Collectors) - 浏览多类型创意内容,发现优秀作品 - 参与实时拍卖与竞价战争 - 抽盲盒获得稀有作品 - 查看作品历史交易、稀有度、投票权重 - 参与年度最佳评选与社区治理 ### 🛠 对平台管理者(Admins) - 内容审核、创意分类管理 - 交易监控、反作弊(恶意出价、刷票) - 收益结算、平台抽成 - 查看完整的大数据报表:访问量、成交额、活跃度 - 自定义投票算法 / 抽奖概率 / 抽成比例 --- ## 三、核心功能(Features) ### 1. 创意中心(Artwork) - 创意内容发布 / 编辑 / 删除 - 多级缓存(Caffeine + Redis)加速访问 - 全文搜索(ElasticSearch) - 排行榜(按浏览、销售、投票) ### 2. 拍卖系统(Auction) - 英式拍卖(逐价竞拍) - 荷兰拍卖(价格递减) - 密封竞价(匿名出价) - WebSocket 实时竞价 - Redis + Lua 保障竞价原子性与高并发 ### 3. 盲盒系统(BlindBox) - 多种稀有度权重的抽奖 - 动画开箱 - 防重复开箱(幂等) - 盲盒库存与补货任务 ### 4. 订单系统(Order) - 创意购买、拍卖成交、盲盒订单 - 支付 / 取消 / 退款 / 结算 - 多服务调用下的分布式一致性(Seata 支持) ### 5. 钱包系统(Wallet) - 充值、提现(可接第三方或模拟) - 余额锁定(下单预扣) - 原子扣费(Redis Lua) - 收益结算(创作者收益 + 平台扣税) ### 6. 投票系统(Vote) - 每用户每日限票 - 权重投票(粉丝数、历史评分) - 防刷票机制(Redis 限制) - 年度最佳作品评选任务 ### 7. 消息通知(Notification) - 拍卖实时出价提醒(WebSocket) - 盲盒抽奖结果(SSE) - 系统消息(邮件可选) ### 8. 后台管理系统(Admin Panel) - 审核发布内容与举报 - 监控交易与收益 - 热门排行榜分析 - 抽奖策略 / 投票权重配置 - 数据大屏(访问量、交易额、增长趋势) ![[业务模块图-9ab4955b.png]] --- ## 四、系统架构(Architecture) ### 总体架构图 ![[架构图-62b6ad24.png]] ### 技术栈 #### 后端: - **Java 17 + Spring Boot 3** - Spring Cloud Alibaba(Gateway / Nacos / Sentinel / Seata) - MyBatis Plus - Redis / Redisson - RabbitMQ - ElasticSearch - XXL-Job - SkyWalking #### 前端: - Vue3 + Vite - Pinia - TailwindCSS - TypeScript - WebSocket / SSE #### 基础设施: - MySQL 8.0 - Docker / docker-compose - Nginx ![[技术栈图-284f704d.png]] ### 项目代码结构 ```text canvas-chain/ ├── canvas-chain-common/ # 通用模块 │ ├── pom.xml │ ├── src/main/java/ │ │ ├── entity/ │ │ │ ├── User.java # 用户 │ │ │ ├── Artwork.java # 创意作品 │ │ │ ├── Auction.java # 拍卖 │ │ │ ├── BlindBox.java # 盲盒 │ │ │ ├── Transaction.java # 交易 │ │ │ ├── Vote.java # 投票 │ │ │ ├── NFT.java # NFT 虚拟资产 │ │ │ └── Wallet.java # 钱包 │ │ ├── dto/ │ │ ├── enums/ │ │ │ ├── AuctionStatus.java │ │ │ ├── TransactionType.java │ │ │ └── ArtworkCategory.java │ │ ├── util/ │ │ │ ├── RedisUtil.java │ │ │ ├── MqUtil.java │ │ │ ├── IdGenerator.java # NFT ID 生成 │ │ │ └── PriceCalculator.java # 价格计算 │ │ ├── exception/ │ │ └── config/ │ │ ├── RedisConfig.java │ │ ├── MqConfig.java │ │ └── BloomFilterConfig.java │ │ │ └── resources/ │ └── sql/ │ └── init.sql # 初始化脚本 │ ├── canvas-chain-gateway/ # API 网关 │ ├── pom.xml │ └── src/main/java/ │ ├── filter/ │ │ ├── SentinelFilter.java │ │ ├── AuthFilter.java │ │ └── RateLimitFilter.java │ ├── config/ │ └── handler/ │ └── GlobalExceptionHandler.java │ ├── canvas-chain-user-service/ # 用户服务 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ │ ├── UserController.java │ │ └── AuthController.java │ ├── service/ │ ├── mapper/ │ ├── entity/ │ └── config/ │ ├── canvas-chain-artwork-service/ # 创意服务 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ ├── service/ │ ├── mapper/ │ ├── entity/ │ ├── es/ │ │ └── ArtworkSearchService.java # ElasticSearch 搜索 │ ├── cache/ │ │ └── ArtworkCacheManager.java # 缓存管理 │ └── mq/ │ ├── ArtworkEventSender.java │ └── ArtworkEventListener.java │ ├── canvas-chain-auction-service/ # 拍卖服务 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ │ └── AuctionController.java # 竞价接口 │ ├── service/ │ │ ├── AuctionService.java │ │ ├── BidService.java # 出价逻辑 │ │ └── AuctionStrategyService.java │ ├── mapper/ │ ├── entity/ │ ├── mq/ │ │ ├── BidEventSender.java │ │ ├── AuctionSettlementListener.java │ │ └── PriceNotificationSender.java │ ├── websocket/ │ │ └── AuctionWebSocketServer.java # 实时竞价推送 │ ├── strategy/ │ │ ├── EnglishAuctionStrategy.java # 英式拍卖 │ │ ├── DutchAuctionStrategy.java # 荷兰式拍卖 │ │ └── SealedBidStrategy.java # 密封竞价 │ └── lua/ │ └── bid_lock.lua # 竞价加锁脚本 │ ├── canvas-chain-blindbox-service/ # 盲盒服务 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ ├── service/ │ │ ├── BlindBoxService.java │ │ └── LotteryService.java # 抽奖逻辑 │ ├── mapper/ │ ├── entity/ │ ├── mq/ │ │ ├── BoxOpenedEventSender.java │ │ └── LotteryResultListener.java │ ├── strategy/ │ │ └── PrizeDistribution.java # 奖品分配策略 │ └── animation/ │ └── BoxOpeningEffect.java # 开箱动画数据 │ ├── canvas-chain-order-service/ # 订单/交易服务 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ ├── service/ │ │ ├── OrderService.java │ │ ├── CombinedAuctionService.java # 聚合拍卖 │ │ ├── TransactionService.java │ │ └── SettlementService.java # 结算逻辑 │ ├── mapper/ │ ├── entity/ │ ├── mq/ │ │ ├── OrderEventSender.java │ │ ├── PaymentListener.java │ │ └── SettlementProcessor.java │ ├── feign/ │ │ ├── WalletServiceClient.java │ │ └── UserServiceClient.java │ └── seata/ │ ├── OrderTxService.java # Seata 事务 │ └── WalletTxService.java │ ├── canvas-chain-wallet-service/ # 钱包服务 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ ├── service/ │ │ ├── WalletService.java │ │ ├── RechargeService.java │ │ ├── WithdrawService.java │ │ └── BalanceLockService.java # 余额锁定 │ ├── mapper/ │ ├── entity/ │ ├── mq/ │ │ ├── RechargeEventListener.java │ │ └── WithdrawEventListener.java │ └── lua/ │ ├── balance_deduct.lua # 扣费原子操作 │ └── balance_lock.lua # 余额锁定 │ ├── canvas-chain-vote-service/ # 投票服务 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ ├── service/ │ │ ├── VoteService.java │ │ ├── VotingRuleService.java # 投票规则 │ │ └── AnnualAwardService.java # 年度最佳计算 │ ├── mapper/ │ ├── entity/ │ ├── mq/ │ │ └── VoteEventListener.java │ └── strategy/ │ └── WeightedVotingStrategy.java │ ├── canvas-chain-nft-service/ # NFT 虚拟资产服务 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ ├── service/ │ │ ├── NFTService.java │ │ ├── NFTMintingService.java # 铸造逻辑 │ │ ├── NFTTransferService.java # 转移逻辑 │ │ └── MetadataService.java # 元数据管理 │ ├── mapper/ │ ├── entity/ │ ├── mq/ │ │ ├── NFTMintedEventSender.java │ │ └── NFTTransferredListener.java │ └── blockchain/ │ └── MockBlockchainService.java # 模拟上链 │ ├── canvas-chain-notification-service/ # 通知服务 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ ├── service/ │ │ ├── NotificationService.java │ │ ├── SSEService.java # 服务端推送 │ │ └── EmailService.java │ ├── mq/ │ │ └── NotificationListener.java # MQ 监听通知事件 │ └── websocket/ │ └── NotificationWebSocket.java │ ├── canvas-chain-job-service/ # 定时任务服务 │ ├── pom.xml │ └── src/main/java/ │ ├── job/ │ │ ├── AuctionFinalizerJob.java # 拍卖结算 │ │ ├── HotArtworkJob.java # 热门创意更新 │ │ ├── RevenueSettlementJob.java # 收益清算 │ │ ├── AnnualAwardCalculationJob.java # 年度最佳计算 │ │ ├── BlindBoxRefreshJob.java # 盲盒库存刷新 │ │ ├── DataCleanupJob.java # 过期数据清理 │ │ └── ReportGenerationJob.java # 报表生成 │ └── config/ │ └── XxlJobConfig.java │ ├── canvas-chain-admin/ # 后台管理系统 │ ├── pom.xml │ └── src/main/java/ │ ├── controller/ │ │ ├── DashboardController.java # 数据大屏 │ │ ├── AuditController.java # 内容审核 │ │ └── ReportController.java # 数据报表 │ ├── service/ │ ├── mapper/ │ └── entity/ │ ├── canvas-chain-frontend/ # 前端 (Vue3) │ ├── src/ │ │ ├── views/ │ │ │ ├── Showcase.vue # 创意展厅 │ │ │ ├── AuctionHall.vue # 拍卖大厅 │ │ │ ├── BlindBoxGallery.vue # 盲盒开箱 │ │ │ ├── VotingSquare.vue # 投票广场 │ │ │ ├── UserCenter.vue # 个人中心 │ │ │ └── Dashboard.vue # 数据大屏 │ │ ├── components/ │ │ │ ├── AuctionBidPanel.vue # 竞价面板 │ │ │ ├── BoxOpeningAnimation.vue # 开箱动画 │ │ │ ├── RealTimePrice.vue # 实时价格 │ │ │ └── LiveBidList.vue # 实时竞价列表 │ │ ├── api/ │ │ ├── store/ │ │ └── utils/ │ │ ├── websocket.js # WebSocket 连接 │ │ └── sse.js # SSE 连接 │ └── package.json │ ├── docker-compose.yml # 容器编排 │ # MySQL、Redis、RabbitMQ、Nacos、Sentinel、 │ # Seata Server、XXL-Job、Skywalking、ElasticSearch、 │ # Nginx(网关) │ ├── docs/ │ ├── architecture.md # 架构文档 │ ├── database-design.md # 数据库设计 │ ├── api-docs.md # API 文档 │ └── deployment-guide.md # 部署指南 │ └── README.md ``` --- **VibeCoding 导航**:⬅️ [[02-计划书|02-计划书]] | 01-项目文档(Project Overview) | ➡️ [[02-CanvasChain 第1周 - 基础架构搭建详细设计文档|02-CanvasChain 第1周 - 基础架构搭建详细设计文档]]